<#assign pojo=oneToManyPojo.getOne()>
<#assign many=oneToManyPojo.getMany()>
<#assign ones=oneToManyPojo.getOnes()>
package ${pojo.getPackageName()}.controller;

<#assign classbody>
<#assign service="${pojo.getDeclarationNameFirstLetterLower()}Service">
<#assign declarationName = pojo.importType(pojo.getDeclarationName())>
<#assign declarationNameFirstLetterLower = "${pojo.getDeclarationNameFirstLetterLower()}">
<#assign declarationComment = "${pojo.getComment()}">
/**
 * @author bo.wang
 */
public class Base${declarationName}Controller {
	@Resource
	${declarationName}Service ${service};

    Log log = LogFactory.getLog(Base${declarationName}Controller.class);

    @ApiOperation(value = "列出所有${declarationComment}")
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public List<${declarationName}VO> find${declarationName}ByList(@RequestParam Map params) throws Exception {
        log.info("${declarationName}#findByList");
        return ${declarationNameFirstLetterLower}Service.find${declarationName}VOByParams(params);
    }

    @ApiOperation(value = "分页列出${declarationComment}")
    @RequestMapping(value = "/findByPage", method = RequestMethod.GET)
    public DaoPage find${declarationName}ByPage(@RequestParam Map params) throws Exception {
        log.info("${declarationName}#findByPage");
        DaoPage daoPage = ${declarationNameFirstLetterLower}Service.find${declarationName}VOByParams(params, PageUtils.getPageIndex(params), PageUtils.getPageSize(params));
        return daoPage;
    }

    @ApiOperation(value = "新建一个${declarationComment}")
    @RequestMapping(value = "/", method = RequestMethod.POST)
    @Transactional
    public ${declarationName}VO create(@ApiParam(value = "", required = true) @RequestBody ${declarationName}VO ${declarationNameFirstLetterLower}VO) {
        log.info("${declarationName}#create");
        ${declarationName} entity = ${declarationNameFirstLetterLower}Service.convert${declarationName}VOTo(${declarationNameFirstLetterLower}VO);
        ${declarationNameFirstLetterLower}Service.save(entity);
        return ${declarationNameFirstLetterLower}Service.convert${declarationName}ToVO(entity);
    }

    @ApiOperation(value = "获取单个${declarationComment}")
    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    @Transactional
    public ${declarationName}VO findById(@ApiParam(value = "ID") @PathVariable("id") String id) {
        log.info("${declarationName}#findOne");
        AssertHelper.notEmpty_assert(id, "ID不能为空");
        ${declarationName} entity = (${declarationName}) ${declarationNameFirstLetterLower}Service.get(${declarationName}.class, id);
        if (entity != null) {
            return ${declarationNameFirstLetterLower}Service.convert${declarationName}ToVO(entity);
        } else {
            throw new BusinessException("没有找到指定ID的数据");
        }
    }

    @ApiOperation(value = "更新某个指定的实体")
    @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
    @Transactional
    public ${declarationName}VO update(@ApiParam(value = "ID") @PathVariable("id") String id, @ApiParam(value = "更新的", required = true) @RequestBody ${declarationName}VO ${declarationNameFirstLetterLower}VO) {
        log.info("${declarationName}#update");
        ${declarationName} entity = ${declarationNameFirstLetterLower}Service.convert${declarationName}VOTo(${declarationNameFirstLetterLower}VO);
        ${declarationNameFirstLetterLower}Service.update(entity);
        return ${declarationNameFirstLetterLower}Service.convert${declarationName}ToVO(entity);
    }

    @ApiOperation(value = "更新指定主键数据（提供部分信息）")
    @RequestMapping(value = "/{ids_}", method = RequestMethod.PATCH)
    @Transactional
    public void updatePatch(@ApiParam(value = "ID") @PathVariable("ids_") String ids_, @ApiParam(value = "更新的", required = true) @RequestBody Map ${declarationNameFirstLetterLower}VO) {
        log.info("${declarationName}#updatePatch");

    }

    @ApiOperation(value = "删除某个${declarationComment}")
    @RequestMapping(value = "/{ids_}", method = RequestMethod.DELETE)
    @Transactional
    public void delete(@ApiParam(value = "删除的ID") @PathVariable("ids_") String ids_) {
        log.info("${declarationName}#delete");
        String[] ids=ids_.split(",");
        for(String id:ids) {
            AssertHelper.notEmpty_assert(id, "ID不能为空");
            ${declarationName} entity = (${declarationName}) ${declarationNameFirstLetterLower}Service.get(${declarationName}.class, id);
            ${declarationNameFirstLetterLower}Service.remove(entity);
        }
    }

    @ApiOperation(value = "保存带状态的Map数据集合")
    @RequestMapping(value = "/saveMap", method = RequestMethod.POST)
    @Transactional
    public void saveMap(@ApiParam(value = "", required = true) @RequestBody Map<String, List<${declarationName}VO>> dataListsMap) {
        ${declarationNameFirstLetterLower}Service.save${declarationName}DataListsMap(dataListsMap);
    }

    @ApiOperation(value = "保存数据集合")
    @RequestMapping(value = "/saveAll", method = RequestMethod.POST)
    @Transactional
    public void saveAll(@ApiParam(value = "", required = true) @RequestBody List<${declarationName}VO> dataLists) {
		if (dataLists != null&&dataLists.size() > 0) {
			for(${declarationName}VO vo: dataLists){
                ${declarationName} entity=${declarationNameFirstLetterLower}Service.convert${declarationName}VOTo(vo);
                ${declarationNameFirstLetterLower}Service.save(entity);
			}
		}
    }

    <#foreach child in many>
        <#assign childdeclarationName = child.importType(child.getDeclarationName())>
        <#assign childdeclarationNameFirstLetterLower = child.importType(child.getDeclarationNameFirstLetterLower())>
        <#assign tempchild=child>

        <#if child.getRelation() == "MANY_EMBED">
    @ApiOperation(value = "列出所有功能")
    @RequestMapping(value = "/${childdeclarationNameFirstLetterLower}", method = RequestMethod.GET)
    public List<${childdeclarationName}VO> find${childdeclarationName}ByList(@RequestParam Map params) throws Exception {
        log.info("${childdeclarationName}#findByList");
        return ${declarationNameFirstLetterLower}Service.find${childdeclarationName}VOByParams(params);
    }

    @ApiOperation(value = "分页列出功能")
    @RequestMapping(value = "/${childdeclarationNameFirstLetterLower}/findByPage", method = RequestMethod.GET)
    public DaoPage find${childdeclarationName}ByPage(@RequestParam Map params) throws Exception {
//        log.info("${childdeclarationName}#findByPage");
//        DaoPage daoPage = ${declarationNameFirstLetterLower}Service.find${childdeclarationName}VOByParams(params, PageUtils.getPageIndex(params), PageUtils.getPageSize(params));
//        return daoPage;
        throw new BusinessException("不支持的方法");
    }

    @ApiOperation(value = "新建一个功能")
    @RequestMapping(value = "/${childdeclarationNameFirstLetterLower}/{${declarationNameFirstLetterLower}Id}", method = RequestMethod.POST)
    @Transactional
    public ${childdeclarationName}VO create${childdeclarationName}(@ApiParam(value = "${declarationNameFirstLetterLower}Id") @PathVariable("${declarationNameFirstLetterLower}Id") String ${declarationNameFirstLetterLower}Id,@ApiParam(value = "", required = true) @RequestBody ${childdeclarationName}VO ${child.getDeclarationNameFirstLetterLower()}VO) {
        log.info("${childdeclarationName}#create");
        ${child.getDeclarationNameFirstLetterLower()}VO.setId(UUID.randomUUID().toString());
        ${childdeclarationName} entity = ${declarationNameFirstLetterLower}Service.convert${childdeclarationName}VOTo(${child.getDeclarationNameFirstLetterLower()}VO);
        ${declarationNameFirstLetterLower}Service.saveEmbed(${declarationName}.class,"${childdeclarationNameFirstLetterLower}s",${declarationNameFirstLetterLower}Id,entity);
        return ${declarationNameFirstLetterLower}Service.convert${childdeclarationName}ToVO(entity);
    }

    @ApiOperation(value = "获取单个功能")
    @RequestMapping(value = "/${childdeclarationNameFirstLetterLower}/{${declarationNameFirstLetterLower}Id}/{id}", method = RequestMethod.GET)
    @Transactional
    public ${childdeclarationName}VO find${childdeclarationName}ById(@ApiParam(value = "${declarationNameFirstLetterLower}Id") @PathVariable("${declarationNameFirstLetterLower}Id") String ${declarationNameFirstLetterLower}Id,@ApiParam(value = "ID") @PathVariable("id") String id) {
        log.info("${childdeclarationName}#findOne");
        AssertHelper.notEmpty_assert(id, "ID不能为空");
        ${childdeclarationName} entity = (${childdeclarationName}) ${declarationNameFirstLetterLower}Service.getEmbed(${declarationName}.class,"${childdeclarationNameFirstLetterLower}s",${declarationNameFirstLetterLower}Id, id);
        if (entity != null) {
            return ${declarationNameFirstLetterLower}Service.convert${childdeclarationName}ToVO(entity);
        } else {
            throw new BusinessException("没有找到指定ID的数据");
        }
    }

    @ApiOperation(value = "更新某个指定的实体")
    @RequestMapping(value = "/${childdeclarationNameFirstLetterLower}/{${declarationNameFirstLetterLower}Id}/{id}", method = RequestMethod.PUT)
    @Transactional
    public ${childdeclarationName}VO update${childdeclarationName}(@ApiParam(value = "${declarationNameFirstLetterLower}Id") @PathVariable("${declarationNameFirstLetterLower}Id") String ${declarationNameFirstLetterLower}Id,@ApiParam(value = "ID") @PathVariable("id") String id, @ApiParam(value = "更新的", required = true) @RequestBody ${childdeclarationName}VO ${child.getDeclarationNameFirstLetterLower()}VO) {
        log.info("${childdeclarationName}#update");
        ${childdeclarationName} entity = ${declarationNameFirstLetterLower}Service.convert${childdeclarationName}VOTo(${child.getDeclarationNameFirstLetterLower()}VO);
        ${declarationNameFirstLetterLower}Service.updateEmbed(${declarationName}.class,"${childdeclarationNameFirstLetterLower}s",${declarationNameFirstLetterLower}Id, entity);
        return ${declarationNameFirstLetterLower}Service.convert${childdeclarationName}ToVO(entity);
    }

    @ApiOperation(value = "更新指定主键数据（提供部分信息）")
    @RequestMapping(value = "/${childdeclarationNameFirstLetterLower}/{${declarationNameFirstLetterLower}Id}/{ids_}", method = RequestMethod.PATCH)
    @Transactional
    public void update${childdeclarationName}Patch(@ApiParam(value = "${declarationNameFirstLetterLower}Id") @PathVariable("${declarationNameFirstLetterLower}Id") String ${declarationNameFirstLetterLower}Id,@ApiParam(value = "ID") @PathVariable("ids_") String ids_, @ApiParam(value = "更新的", required = true) @RequestBody Map ${child.getDeclarationNameFirstLetterLower()}VO) {
        log.info("${childdeclarationName}#updatePatch");
    }

    @ApiOperation(value = "删除某个功能")
    @RequestMapping(value = "/${childdeclarationNameFirstLetterLower}/{${declarationNameFirstLetterLower}Id}/{ids_}", method = RequestMethod.DELETE)
    @Transactional
    public void delete${childdeclarationName}(@ApiParam(value = "${declarationNameFirstLetterLower}Id") @PathVariable("${declarationNameFirstLetterLower}Id") String ${declarationNameFirstLetterLower}Id,@ApiParam(value = "删除的ID") @PathVariable("ids_") String ids_) {
        log.info("${childdeclarationName}#delete");
        String[] ids = ids_.split(",");
        for (String id : ids) {
            AssertHelper.notEmpty_assert(id, "ID不能为空");
//            ${childdeclarationName} entity = (${childdeclarationName}) ${declarationNameFirstLetterLower}Service.get(${declarationName}.class,"${childdeclarationNameFirstLetterLower}s",${declarationNameFirstLetterLower}Id, id);
            ${childdeclarationName} entity =new ${childdeclarationName}();
            entity.setId(id);
            ${declarationNameFirstLetterLower}Service.removeEmbed(${declarationName}.class,"${childdeclarationNameFirstLetterLower}s",${declarationNameFirstLetterLower}Id, entity);
        }
    }
        </#if>
        <#if child.getRelation() == "MANY_DEFAULT">

    @ApiOperation(value = "列出所有功能")
    @RequestMapping(value = "/${childdeclarationNameFirstLetterLower}/{${declarationNameFirstLetterLower}Id}", method = RequestMethod.GET)
    public List<${childdeclarationName}VO> find${childdeclarationName}ByList(@ApiParam(value = "${declarationNameFirstLetterLower}Id") @PathVariable("${declarationNameFirstLetterLower}Id") String ${declarationNameFirstLetterLower}Id,@RequestParam Map params) throws Exception {
        log.info("${childdeclarationName}#findByList");
        return ${declarationNameFirstLetterLower}Service.find${childdeclarationName}VOByParams(params);
    }

    @ApiOperation(value = "分页列出功能")
    @RequestMapping(value = "/${childdeclarationNameFirstLetterLower}/{${declarationNameFirstLetterLower}Id}/findByPage", method = RequestMethod.GET)
    public DaoPage find${childdeclarationName}ByPage(@ApiParam(value = "${declarationNameFirstLetterLower}Id") @PathVariable("${declarationNameFirstLetterLower}Id") String ${declarationNameFirstLetterLower}Id,@RequestParam Map params) throws Exception {
        log.info("${childdeclarationName}#findByPage");
        DaoPage daoPage = ${declarationNameFirstLetterLower}Service.find${childdeclarationName}VOByParams(params, PageUtils.getPageIndex(params), PageUtils.getPageSize(params));
        return daoPage;
    }

    @ApiOperation(value = "新建一个功能")
    @RequestMapping(value = "/${childdeclarationNameFirstLetterLower}/{${declarationNameFirstLetterLower}Id}", method = RequestMethod.POST)
    @Transactional
    public ${childdeclarationName}VO create${childdeclarationName}(@ApiParam(value = "${declarationNameFirstLetterLower}Id") @PathVariable("${declarationNameFirstLetterLower}Id") String ${declarationNameFirstLetterLower}Id,@ApiParam(value = "", required = true) @RequestBody ${childdeclarationName}VO ${child.getDeclarationNameFirstLetterLower()}VO) {
        log.info("${childdeclarationName}#create");
        ${childdeclarationName} entity = ${declarationNameFirstLetterLower}Service.convert${childdeclarationName}VOTo(${child.getDeclarationNameFirstLetterLower()}VO);
        ${declarationNameFirstLetterLower}Service.save(entity);
        return ${declarationNameFirstLetterLower}Service.convert${childdeclarationName}ToVO(entity);
    }

    @ApiOperation(value = "获取单个功能")
    @RequestMapping(value = "/${childdeclarationNameFirstLetterLower}/{${declarationNameFirstLetterLower}Id}/{id}", method = RequestMethod.GET)
    @Transactional
    public ${childdeclarationName}VO find${childdeclarationName}ById(@ApiParam(value = "${declarationNameFirstLetterLower}Id") @PathVariable("${declarationNameFirstLetterLower}Id") String ${declarationNameFirstLetterLower}Id,@ApiParam(value = "ID") @PathVariable("id") String id) {
        log.info("${childdeclarationName}findOne");
        AssertHelper.notEmpty_assert(id, "ID不能为空");
        ${childdeclarationName} entity = (${childdeclarationName}) ${declarationNameFirstLetterLower}Service.get(${childdeclarationName}.class, id);
        if (entity != null) {
            return ${declarationNameFirstLetterLower}Service.convert${childdeclarationName}ToVO(entity);
        } else {
            throw new BusinessException("没有找到指定ID的数据");
        }
    }

    @ApiOperation(value = "更新指定主键数据的全部信息")
    @RequestMapping(value = "/${childdeclarationNameFirstLetterLower}/{${declarationNameFirstLetterLower}Id}/{id}", method = RequestMethod.PUT)
    @Transactional
    public ${childdeclarationName}VO update${childdeclarationName}(@ApiParam(value = "${declarationNameFirstLetterLower}Id") @PathVariable("${declarationNameFirstLetterLower}Id") String ${declarationNameFirstLetterLower}Id,@ApiParam(value = "ID") @PathVariable("id") String id, @ApiParam(value = "更新的", required = true) @RequestBody ${childdeclarationName}VO ${child.getDeclarationNameFirstLetterLower()}VO) {
        log.info("${childdeclarationName}update");
        ${childdeclarationName} entity = ${declarationNameFirstLetterLower}Service.convert${childdeclarationName}VOTo(${child.getDeclarationNameFirstLetterLower()}VO);
        ${declarationNameFirstLetterLower}Service.update(entity);
        return ${declarationNameFirstLetterLower}Service.convert${childdeclarationName}ToVO(entity);
    }

    @ApiOperation(value = "更新指定主键数据（提供部分信息）")
    @RequestMapping(value = "/${childdeclarationNameFirstLetterLower}/{${declarationNameFirstLetterLower}Id}/{ids_}", method = RequestMethod.PATCH)
    @Transactional
    public void update${childdeclarationName}Patch(@ApiParam(value = "${declarationNameFirstLetterLower}Id") @PathVariable("${declarationNameFirstLetterLower}Id") String ${declarationNameFirstLetterLower}Id,@ApiParam(value = "ID") @PathVariable("ids_") String ids_, @ApiParam(value = "更新的", required = true) @RequestBody Map ${child.getDeclarationNameFirstLetterLower()}VO) {
        log.info("${childdeclarationName}updatePatch");
    }

    @ApiOperation(value = "删除某个功能")
    @RequestMapping(value = "/${childdeclarationNameFirstLetterLower}/{${declarationNameFirstLetterLower}Id}/{ids_}", method = RequestMethod.DELETE)
    @Transactional
    public void delete${childdeclarationName}(@ApiParam(value = "${declarationNameFirstLetterLower}Id") @PathVariable("${declarationNameFirstLetterLower}Id") String ${declarationNameFirstLetterLower}Id,@ApiParam(value = "删除的ID") @PathVariable("ids_") String ids_) {
        log.info("${childdeclarationName}delete");
        String[] ids = ids_.split(",");
        for (String id : ids) {
            AssertHelper.notEmpty_assert(id, "ID不能为空");
            ${childdeclarationName} entity = (${childdeclarationName}) ${declarationNameFirstLetterLower}Service.get(${childdeclarationName}.class, id);
            ${declarationNameFirstLetterLower}Service.remove(entity);
        }
    }
    @ApiOperation(value = "保存带状态的Map数据集合")
    @RequestMapping(value = "/${childdeclarationNameFirstLetterLower}/saveMap", method = RequestMethod.POST)
    @Transactional
    public void saveMap(@ApiParam(value = "", required = true) @RequestBody Map<String, List<${childdeclarationName}VO>> dataListsMap) {
            ${declarationNameFirstLetterLower}Service.save${childdeclarationName}DataListsMap(dataListsMap);
    }

    @ApiOperation(value = "保存数据集合")
    @RequestMapping(value = "/${childdeclarationNameFirstLetterLower}/saveAll", method = RequestMethod.POST)
    @Transactional
    public void saveAll(@ApiParam(value = "", required = true) @RequestBody List<${childdeclarationName}VO> dataLists) {
		if (dataLists != null&&dataLists.size() > 0) {
			for(${childdeclarationName}VO vo: dataLists){
                ${childdeclarationName} entity=${declarationNameFirstLetterLower}Service.convert${childdeclarationName}VOTo(vo);
                ${declarationNameFirstLetterLower}Service.save(entity);
			}
		}
    }
        </#if>

    </#foreach>
    <#foreach child in ones>
    </#foreach>

	public DaoPage load${declarationName}Page(Map parameter,Integer pageIndex,
		Integer pageSize) throws Exception {
		DaoPage daoPage=${service}.find${declarationName}ByParams(parameter, pageIndex, pageSize);
		return daoPage;
	}

	public Collection<${declarationName}VO> load${declarationName}List(Map parameter) throws Exception {
		List result=${service}.find${declarationName}ByParams(parameter);
		return result;
	}

	public ${declarationName}VO loadAdd${declarationName}(Map parameter) throws Exception {
		${declarationName}VO vo=new ${declarationName}VO();
		return vo;
	}

	public ${declarationName}VO loadModify${declarationName}(Map parameter) throws Exception {
		Object id=parameter.get("id");
		return loadModify${declarationName}(id);
	}

    public ${declarationName}VO loadModify${declarationName}(Object id) throws Exception {
		AssertHelper.notEmpty_assert(id,"编辑的主键不能为空");
		${declarationName} entity=(${declarationName})${service}.get(${declarationName}.class,id.toString());
		${declarationName}VO vo=${service}.convert${declarationName}ToVO(entity);
		return vo;
    }

	public void save${declarationName}(Collection<${declarationName}VO> objs) throws Exception {
		Map results= PageUtils.assembleDatasetMap(objs);
		${service}.save${declarationName}DataListsMap(results);
	}

	public void saveAdd${declarationName}(${declarationName}VO vo) throws Exception {
		${declarationName} entity=${service}.convert${declarationName}VOTo(vo);
		if(entity.getId()==null){
			${service}.save(entity);
		}
		else{
			${service}.update(entity);
		}
		vo.setId(entity.getId());
	}

	public void updateModify${declarationName}(${declarationName}VO vo) throws Exception {
		${declarationName} entity=(${declarationName})${service}.get(${declarationName}.class,vo.getId());
		ReflectUtils.copyProperties(vo, entity);
		${service}.update(entity);
	}
<#foreach child in many>
<#assign childdeclarationName = child.importType(child.getDeclarationName())>
<#assign tempchild=child>

	public DaoPage load${childdeclarationName}(Map parameter,Integer pageIndex,
    	Integer pageSize) throws Exception {
		DaoPage daoPage=${service}.find${childdeclarationName}ByParams(parameter, pageIndex, pageSize);
		return daoPage;
	}

	public Collection load${childdeclarationName}(Map parameter) throws Exception {
		List result=${service}.find${childdeclarationName}ByParams(parameter);
		return result;
	}

	public void save${childdeclarationName}(Collection<${childdeclarationName}VO> objs) throws Exception {
		Map results= PageUtils.assembleDatasetMap(objs);
		${service}.save${childdeclarationName}DataListsMap(results);
	}
</#foreach>
<#foreach child in ones>
<#assign childdeclarationName = child.importType(child.getDeclarationName())>

	public ${childdeclarationName} find${childdeclarationName}(Map parameter)
	{
		return ${service}.find${childdeclarationName}(parameter);
	}

	public ${childdeclarationName} loadAdd${childdeclarationName}(Map parameter)
	{
		${childdeclarationName} result=new ${childdeclarationName}();
		return result;
	}

	public void save${childdeclarationName}(${childdeclarationName}VO obj) throws Exception {
		if(obj.getId()==null)
		{
			${service}.save(obj);
		}else {
			${service}.update(obj);
		}
	}
</#foreach>
}
</#assign>
import java.io.Serializable;
import java.util.Collection;
import java.util.Map;
import java.util.List;
import java.util.UUID;

import javax.annotation.Resource;
import javax.transaction.Transactional;

import com.ling.pl.core.commons.exception.BusinessException;
import com.ling.pl.core.commons.utils.BatchUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Component;

import com.ling.pl.core.commons.support.DaoPage;
import com.ling.pl.core.commons.utils.PageUtils;
import com.ling.pl.core.commons.utils.AssertHelper;
import com.ling.pl.core.commons.utils.reflect.ReflectUtils;
import org.springframework.web.bind.annotation.*;
import ${pojo.getPackageName()}.model.${declarationName};
import ${pojo.getPackageName()}.model.${declarationName}VO;
import ${pojo.getPackageName()}.model.${declarationName};
<#foreach child in many>
    <#assign childdeclarationName = child.importType(child.getDeclarationName())>
import ${child.getPackageName()}.model.${childdeclarationName}VO;
import ${child.getPackageName()}.model.${childdeclarationName};
</#foreach>
<#foreach child in ones>
    <#assign childdeclarationName = child.importType(child.getDeclarationName())>
import ${child.getPackageName()}.model.${childdeclarationName}VO;
import ${child.getPackageName()}.model.${childdeclarationName};
</#foreach>
import ${pojo.getPackageName()}.service.${declarationName}Service;
${classbody}
